//package com.quanxiaoha.weblog.common.utils;
//
//import com.quanxiaoha.weblog.common.utils.PointsInterestCalculator;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import java.math.BigDecimal;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//
///**
// * 积分利息计算定时任务
// */
//@Slf4j
//@Component
//public class PointsInterestTask {
//
//    @Autowired
//    private RedisTemplate<String, Object> redisTemplate;
//
//    // Redis key 前缀
//    private static final String POINTS_KEY_PREFIX = "user:points:";
//    private static final String POINTS_LAST_UPDATE_TIME_PREFIX = "user:points:last_update:";
//
//    /**
//     * 每半小时执行一次
//     */
//    @Scheduled(cron = "0 0,30 * * * ?")
//    public void calculatePointsInterest() {
//        log.info("开始执行积分利息计算任务，当前时间：{}",
//                LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//
//        try {
//            // 这里假设用户ID为1，实际使用时需要遍历所有需要计算利息的用户
//            String userId = "1";
//            String pointsKey = POINTS_KEY_PREFIX + userId;
//            String lastUpdateTimeKey = POINTS_LAST_UPDATE_TIME_PREFIX + userId;
//
//            // 获取当前积分
//            Object currentPointsObj = redisTemplate.opsForValue().get(pointsKey);
//            if (currentPointsObj == null) {
//                log.info("用户 {} 没有积分记录", userId);
//                return;
//            }
//
//            // 获取上次更新时间
//            Object lastUpdateTimeObj = redisTemplate.opsForValue().get(lastUpdateTimeKey);
//            LocalDateTime lastUpdateTime;
//            if (lastUpdateTimeObj == null) {
//                lastUpdateTime = LocalDateTime.now().minusMinutes(30);
//            } else {
//                lastUpdateTime = LocalDateTime.parse(lastUpdateTimeObj.toString());
//            }
//
//            // 计算新的积分
//            BigDecimal currentPoints = new BigDecimal(currentPointsObj.toString());
//            BigDecimal newPoints = PointsInterestCalculator.calculateInterest(
//                    currentPoints,
//                    lastUpdateTime,
//                    LocalDateTime.now()
//            );
//
//            // 更新积分和最后更新时间
//            redisTemplate.opsForValue().set(pointsKey, newPoints.toString());
//            redisTemplate.opsForValue().set(lastUpdateTimeKey, LocalDateTime.now().toString());
//
//            log.info("用户 {} 积分更新完成：{} -> {}", userId, currentPoints, newPoints);
//        } catch (Exception e) {
//            log.error("积分利息计算任务执行失败", e);
//        }
//    }
//}